Home | History | Annotate | Download | only in include
      1 /**************************************************************************\
      2 *
      3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
      4 *
      5 * Module Name:
      6 *
      7 *   GdiplusFontFamily.h
      8 *
      9 * Abstract:
     10 *
     11 *   Font family API related declarations
     12 *
     13 \**************************************************************************/
     14 
     15 #ifndef _GDIPLUS_FONT_FAMILY_H
     16 #define _GDIPLUS_FONT_FAMILY_H
     17 
     18 inline
     19 FontFamily::FontFamily() :
     20     nativeFamily (NULL),
     21     lastResult    (Ok)
     22 {
     23 }
     24 
     25 inline
     26 FontFamily::FontFamily(
     27     IN const WCHAR*          name,
     28     IN const FontCollection* fontCollection
     29 )
     30 {
     31     nativeFamily = NULL;
     32     lastResult = DllExports::GdipCreateFontFamilyFromName(
     33         name,
     34         fontCollection ? fontCollection->nativeFontCollection : NULL,
     35         &nativeFamily
     36     );
     37 
     38 #ifndef DCR_USE_NEW_135429
     39     if ((INT) lastResult >= 10)
     40         lastResult = NotFound;
     41 #endif
     42 }
     43 
     44 // private method
     45 inline
     46 FontFamily::FontFamily(
     47     IN GpFontFamily *nativeOrig,
     48     IN Status status
     49 )
     50 {
     51     lastResult    = status;
     52     nativeFamily = nativeOrig;
     53 }
     54 
     55 // Generic font family access
     56 
     57 inline const FontFamily *
     58 FontFamily::GenericSansSerif()
     59 {
     60     if (GenericSansSerifFontFamily != NULL)
     61     {
     62         return GenericSansSerifFontFamily;
     63     }
     64 
     65     GenericSansSerifFontFamily =
     66         (FontFamily*) GenericSansSerifFontFamilyBuffer;
     67 
     68     GenericSansSerifFontFamily->lastResult =
     69         DllExports::GdipGetGenericFontFamilySansSerif(
     70             &(GenericSansSerifFontFamily->nativeFamily)
     71         );
     72 
     73 #ifndef DCR_USE_NEW_135429
     74     if ((INT) GenericSansSerifFontFamily->lastResult >= 10)
     75         GenericSansSerifFontFamily->lastResult = NotFound;
     76 #endif
     77 
     78     return GenericSansSerifFontFamily;
     79 }
     80 
     81 inline const FontFamily *
     82 FontFamily::GenericSerif()
     83 {
     84     if (GenericSerifFontFamily != NULL)
     85     {
     86         return GenericSerifFontFamily;
     87     }
     88 
     89     GenericSerifFontFamily =
     90         (FontFamily*) GenericSerifFontFamilyBuffer;
     91 
     92     GenericSerifFontFamily->lastResult =
     93         DllExports::GdipGetGenericFontFamilySerif(
     94             &(GenericSerifFontFamily->nativeFamily)
     95         );
     96 
     97 #ifndef DCR_USE_NEW_135429
     98     if ((INT) GenericSerifFontFamily->lastResult >= 10)
     99         GenericSerifFontFamily->lastResult = NotFound;
    100 #endif
    101 
    102     return GenericSerifFontFamily;
    103 }
    104 
    105 inline const FontFamily *
    106 FontFamily::GenericMonospace()
    107 {
    108     if (GenericMonospaceFontFamily != NULL)
    109     {
    110         return GenericMonospaceFontFamily;
    111     }
    112 
    113     GenericMonospaceFontFamily =
    114         (FontFamily*) GenericMonospaceFontFamilyBuffer;
    115 
    116     GenericMonospaceFontFamily->lastResult =
    117         DllExports::GdipGetGenericFontFamilyMonospace(
    118             &(GenericMonospaceFontFamily->nativeFamily)
    119         );
    120 
    121 #ifndef DCR_USE_NEW_135429
    122     if ((INT) GenericMonospaceFontFamily->lastResult >= 10)
    123         GenericMonospaceFontFamily->lastResult = NotFound;
    124 #endif
    125 
    126     return GenericMonospaceFontFamily;
    127 }
    128 
    129 inline FontFamily::~FontFamily()
    130 {
    131     DllExports::GdipDeleteFontFamily (nativeFamily);
    132 }
    133 
    134 inline FontFamily *
    135 FontFamily::Clone() const
    136 {
    137     GpFontFamily * clonedFamily = NULL;
    138 
    139     SetStatus(DllExports::GdipCloneFontFamily (nativeFamily, &clonedFamily));
    140 
    141     return new FontFamily(clonedFamily, lastResult);
    142 }
    143 
    144 inline Status
    145 FontFamily::GetFamilyName(
    146     IN WCHAR name[LF_FACESIZE],
    147     IN LANGID language
    148 ) const
    149 {
    150     return SetStatus(DllExports::GdipGetFamilyName(nativeFamily,
    151                                                    name,
    152                                                    language));
    153 }
    154 
    155 inline BOOL
    156 FontFamily::IsStyleAvailable(IN INT style) const
    157 {
    158     BOOL    StyleAvailable;
    159     Status  status;
    160 
    161     status = SetStatus(DllExports::GdipIsStyleAvailable(nativeFamily, style, &StyleAvailable));
    162 
    163     if (status != Ok)
    164         StyleAvailable = FALSE;
    165 
    166     return StyleAvailable;
    167 }
    168 
    169 
    170 inline UINT16
    171 FontFamily::GetEmHeight(IN INT style) const
    172 {
    173     UINT16  EmHeight;
    174 
    175     SetStatus(DllExports::GdipGetEmHeight(nativeFamily, style, &EmHeight));
    176 
    177     return EmHeight;
    178 }
    179 
    180 inline UINT16
    181 FontFamily::GetCellAscent(IN INT style) const
    182 {
    183     UINT16  CellAscent;
    184 
    185     SetStatus(DllExports::GdipGetCellAscent(nativeFamily, style, &CellAscent));
    186 
    187     return CellAscent;
    188 }
    189 
    190 inline UINT16
    191 FontFamily::GetCellDescent(IN INT style) const
    192 {
    193     UINT16  CellDescent;
    194 
    195     SetStatus(DllExports::GdipGetCellDescent(nativeFamily, style, &CellDescent));
    196 
    197     return CellDescent;
    198 }
    199 
    200 
    201 inline UINT16
    202 FontFamily::GetLineSpacing(IN INT style) const
    203 {
    204     UINT16  LineSpacing;
    205 
    206     SetStatus(DllExports::GdipGetLineSpacing(nativeFamily, style, &LineSpacing));
    207 
    208     return LineSpacing;
    209 
    210 }
    211 
    212 #ifdef TEXTV2
    213 
    214 // The following APIs return data from the font OS/2 table
    215 
    216 inline INT16
    217 FontFamily::GetTypographicAscent(IN INT style) const
    218 {
    219     INT16  TypographicAscent;
    220 
    221     SetStatus(DllExports::GdipGetTypographicAscent(nativeFamily, style, &TypographicAscent));
    222 
    223     return TypographicAscent;
    224 }
    225 
    226 inline INT16
    227 FontFamily::GetTypographicDescent(IN INT style) const
    228 {
    229     INT16   TypographicDescent;
    230 
    231     SetStatus(DllExports::GdipGetTypographicDescent(nativeFamily, style, &TypographicDescent));
    232 
    233     return TypographicDescent;
    234 }
    235 
    236 inline INT16
    237 FontFamily::GetTypographicLineGap(IN INT style) const
    238 {
    239     INT16   TypographicLineGap;
    240 
    241     SetStatus(DllExports::GdipGetTypographicLineGap(nativeFamily, style, &TypographicLineGap));
    242 
    243     return TypographicLineGap;
    244 }
    245 
    246 #endif
    247 
    248 ///////////////////////////////////////////////////////////
    249 
    250 // GetLastStatus - return last error code and clear error code
    251 
    252 inline Status
    253 FontFamily::GetLastStatus() const
    254 {
    255     Status lastStatus = lastResult;
    256     lastResult = Ok;
    257 
    258     return lastStatus;
    259 }
    260 
    261 // protected method
    262 inline Status
    263 FontFamily::SetStatus(Status status) const
    264 {
    265     if (status != Ok)
    266         return (lastResult = status);
    267     else
    268         return status;
    269 }
    270 
    271 #endif
    272